/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package de.fatalix.book.importer;
import com.google.gson.Gson;
import de.fatalix.book.importer.old.BookEntry;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardOpenOption;
import java.util.Date;
import java.util.List;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
/**
*
* @author Fatalix
*/
public class BookExporterOld {
public static void exportBooks(String solrURL, String solrCore, int batchSize, String exportPath) throws SolrServerException, IOException {
File exportFolder = new File(exportPath);
if(!exportFolder.isDirectory()) {
throw new IOException(exportFolder.getAbsolutePath() + " is not a folder!");
}
SolrServer server = SolrHandler.createConnection(solrURL, solrCore);
System.out.println("Connection established");
Gson gson = new Gson();
exportBatchWise(server, exportFolder, batchSize, 0, gson);
}
private static void exportBatchWise(SolrServer server, File exportFolder, int batchSize, int offset, Gson gson) throws SolrServerException, IOException {
QueryResponse response = SolrHandler.searchSolrIndex(server, "*:*", batchSize, offset);
List<BookEntry> bookEntries = response.getBeans(BookEntry.class);
System.out.println("Retrieved " + (bookEntries.size() + offset) + " of " + response.getResults().getNumFound());
for(BookEntry bookEntry : bookEntries) {
String bookTitle = bookEntry.getTitle();
bookTitle = bookTitle.replaceAll(":", " ");
File bookFolder = new File(exportFolder, bookEntry.getAuthor() + "-" + bookTitle);
bookFolder.mkdirs();
if(bookEntry.getFile() != null && bookEntry.getCover() != null) {
File bookData = new File(bookFolder, bookEntry.getAuthor() + "-" + bookTitle + ".mobi");
Files.write(bookData.toPath(), bookEntry.getFile(), StandardOpenOption.CREATE_NEW);
File coverData = new File(bookFolder, bookEntry.getAuthor() + "-" + bookTitle + ".jpg");
Files.write(coverData.toPath(), bookEntry.getCover(), StandardOpenOption.CREATE_NEW);
Date dreleaseDate = null;
if (bookEntry.getReleaseDate()!=null) {
DateTime dtReleaseDate = DateTime.parse(bookEntry.getReleaseDate(), DateTimeFormat.forPattern("YYYY-MM-dd"));
dtReleaseDate = new DateTime(dtReleaseDate, DateTimeZone.UTC);
dreleaseDate = dtReleaseDate.toDate();
}
DateTime dtUploadDate = new DateTime(DateTimeZone.UTC);
File metaDataFile = new File(bookFolder, bookEntry.getAuthor() + "-" + bookTitle + ".json");
String[] viewed = {};
BookMetaData metaData = new BookMetaData(bookEntry.getAuthor(), bookEntry.getTitle(), bookEntry.getIsbn(),
bookEntry.getPublisher(), bookEntry.getDescription(), bookEntry.getLanguage(),
dreleaseDate, bookEntry.getMimeType(),dtUploadDate.toDate(),viewed,bookEntry.getShared());
gson.toJson(metaData);
Files.write(metaDataFile.toPath(), gson.toJson(metaData).getBytes(), StandardOpenOption.CREATE_NEW);
}
}
if(response.getResults().getNumFound() > offset) {
exportBatchWise(server, exportFolder, batchSize, offset + batchSize, gson);
}
}
}